perm filename TEST1V.SAI[CRE,BGB]2 blob sn#106828 filedate 1974-06-15 generic text, type C, neo UTF8
COMMENT ⊗   VALID 00003 PAGES
C REC  PAGE   DESCRIPTION
C00001 00001
C00002 00002	BEGIN	"TEST1V"
C00004 00003	α EXERCISE LOOP
C00006 ENDMK
C⊗;
BEGIN	"TEST1V"
	REQUIRE "ABBREV[SYS,BGB]" SOURCE_FILE;
	REQUIRE "RANDOM[SYS,BGB]" LOAD_MODULE;
	EXTERNAL REAL PROCEDURE RANDOM;
	REQUIRE "SAITRG[SYS,BGB]" SOURCE_FILE;
	EXTERNAL ITG PROCEDURE LS1V3P(REAL ARRAY V,P1,P2,P3,V3P);

α WORKING SPACE AND NAMINGS;
	INTEGER NROOTS,II,I;
	REAL L2,L3,R,RMIN,RXY,ERR,ERRMAX;
	REAL ARRAY P1,P2,P3,V3P[1:3],V[1:10,1:3];
	DEFINE X1="P1[1]",X2="P2[1]",X3="P3[1]";
	DEFINE Y2="P2[2]",Y3="P3[2]",Z3="P3[3]";

REAL PROCEDURE VERIFY (REAL X,Y,Z);
BEGIN	"VERIFY"
	DEFINE THRICE = "FOR I←1 STEP 1 UNTIL 3 DO";
	INTEGER I;
	REAL LA,LB,LC,CA,CB,CC;
	REAL ARRAY ALEG,BLEG,CLEG,L[1:3];
	L[1]←X;L[2]←Y;L[3]←Z;
	THRICE ALEG[I] ← P3[I] - L[I];
	THRICE BLEG[I] ← P1[I] - L[I];
	THRICE CLEG[I] ← P2[I] - L[I];
	LA	←	SQRT(ALEG[1]↑2 + ALEG[2]↑2 + ALEG[3]↑2);
	LB	←	SQRT(BLEG[1]↑2 + BLEG[2]↑2 + BLEG[3]↑2);
	LC	←	SQRT(CLEG[1]↑2 + CLEG[2]↑2 + CLEG[3]↑2);
   CA ← (BLEG[1]*CLEG[1]+BLEG[2]*CLEG[2]+BLEG[3]*CLEG[3])/(LB*LC);
   CB ← (ALEG[1]*CLEG[1]+ALEG[2]*CLEG[2]+ALEG[3]*CLEG[3])/(LA*LC);
   CC ← (ALEG[1]*BLEG[1]+ALEG[2]*BLEG[2]+ALEG[3]*BLEG[3])/(LA*LB);
	ERR ← (ABS(CA-V3P[1]) + ABS(CB-V3P[2]) + ABS(CC-V3P[3]))/3;
	RETURN(ERR);
END	"VERIFY";
α EXERCISE LOOP;
	FOR II←1 STEP 1 UNTIL 100 DO
BEGIN	"FOREVER"
	INTEGER TIME0,TIME1,TIMES;

α GENERATE A LANDMARK TRIANGLE;
	X1	←	20*RANDOM + 1;
	X2	←	20*RANDOM + 1;
	Y2	←	20*RANDOM + 1;
	X3	←	20*RANDOM + 1;
	Y3	←	20*RANDOM + 1;
	Z3	←	20*RANDOM + 1;

α COMPUTE THE COSINES AT THE CAMERA;
	L2	←	SQRT(X2↑2 + Y2↑2);
	L3	←	SQRT(X3↑2 + Y3↑2 + Z3↑2);
	V3P[3]	←	X2 / L2;
	V3P[1]	←	(X2*X3+Y2*Y3)/ (L2*L3);
	V3P[2]	←	X3 / L3;
	V3P[2]↔V3P[3];V3P[1]↔V3P[2];

α THROW THE SHIT AT THE FAN;
	NROOTS	←	LS1V3P (V,P3,P1,P2,V3P);
	RMIN	←	1000;

α OUTPUT THE RESULTS;
	IF NROOTS < 0 THEN OUTSTR("	NO ROOTS  -  GAP LOW.") ELSE
	IF NROOTS = 0 THEN OUTSTR("	NO ROOTS  -  GAP HIGH") ELSE
	FOR I←1 STEP 1 UNTIL NROOTS DO
	RMIN	← RMIN MIN SQRT(V[I,1]↑2+V[I,2]↑2+V[I,3]↑2);
	OUTSTR(CVG(RMIN)&9);
	IF RMIN>0.1  THEN 
	⊂ OUTSTR("LOSE"&↓);INCHRW;⊃
	ELSE OUTSTR("WIN"&↓);
END	"FOREVER";
END	"TEST1V"